msg_tool\scripts\kirikiri\archive\xp3pack/
reader.rs

1use adler::Adler32;
2use std::io::{PipeReader, Read};
3
4pub struct Reader {
5    inner: PipeReader,
6    adler: Adler32,
7}
8
9impl Reader {
10    pub fn new(inner: PipeReader) -> Self {
11        Self {
12            inner,
13            adler: Adler32::new(),
14        }
15    }
16
17    pub fn into_checksum(self) -> u32 {
18        self.adler.checksum()
19    }
20}
21
22impl Read for Reader {
23    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
24        let n = self.inner.read(buf)?;
25        self.adler.write_slice(&buf[..n]);
26        Ok(n)
27    }
28}